﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace Papaleguas.Library
{
    public sealed class DataWrapper
    {
        private static volatile DataWrapper instance;
        private readonly static object syncRoot = new Object();
        public string PathDados { get; set; }

        public static DataWrapper Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (syncRoot)
                    {
                        if (instance == null)
                            instance = new DataWrapper();
                    }
                }

                return instance;
            }
        }

        private DataWrapper()
        {
            Inicializar();
        }

        private void Inicializar()
        {
            //PathDados = "C:\\Dados.xml";
            BaseDados = new Dados();
            Dados.TipoRow tipoTexto = BaseDados.Tipo.AddTipoRow(1, "Texto", "");
            Dados.TipoRow tipoNumerico = BaseDados.Tipo.AddTipoRow(2, "Numerico", "^[0-9]{1,}$");
            Dados.TipoRow tipoData = BaseDados.Tipo.AddTipoRow(3, "Data", "");
            Dados.TipoRow tipoHora = BaseDados.Tipo.AddTipoRow(4, "Hora", "");

            Dados.LayoutRow layout = BaseDados.Layout.AddLayoutRow(1, "Teste");
            Dados.RegistroRow registro = BaseDados.Registro.AddRegistroRow(1, layout, "Header");
            Dados.CampoRow campo1 = BaseDados.Campo.AddCampoRow(1, registro, "AB", 1, 35, tipoTexto, true, "Teste 1", "#ff3f3f3f");
            Dados.CampoRow campo2 = BaseDados.Campo.AddCampoRow(2, registro, "CD", 2, 3, tipoNumerico, true, "Teste 2", "#FFDFD991");
            Dados.CampoRow campo3 = BaseDados.Campo.AddCampoRow(3, registro, "EF", 3, 3, tipoTexto, true, "Teste 3", "#FFFFFF00");
            
            //BaseDados.ReadXml(PathDados);
        }

        int ultimoNumero(DataTable tabela)
        {
            if (tabela.Select("Id = Max(Id)").Count() > 0)
            {
                return int.Parse(tabela.Select("Id = Max(Id)")[0][0].ToString()) + 1;
            }

            return 1;
        }

        public void Salvar()
        {
            BaseDados.WriteXml(PathDados);
        }

        private void Fechar()
        {
            Salvar();
            BaseDados = null;
        }

        public Dados BaseDados
        {
            get;
            set;
        }
    }

}
